import tempfile
import pathlib
from typing import List, IO

from llama_index.core.schema import Document
from llama_index.readers.file import UnstructuredReader

from ..data_parser_interface import DataParserInterface


class HtmlParser(DataParserInterface):
    """
    一个专门用于解析 HTML (.html, .htm) 文件的解析器。
    它封装了 LlamaIndex 的 UnstructuredReader，它对 HTML 的处理非常强大。
    """

    def parse(self, file: IO[bytes], file_format: str, **kwargs) -> List[Document]:
        """
        从 HTML 文件的二进制流中解析出 Document 对象。
        """
        # UnstructuredReader 需要一个明确的文件名来推断类型
        with tempfile.NamedTemporaryFile(delete=False, suffix=f".{file_format}") as tmp_file:
            tmp_file.write(file.read())
            tmp_file_path = pathlib.Path(tmp_file.name)

        try:
            # 使用 UnstructuredReader，它是一个功能强大的通用解析器
            reader = UnstructuredReader()
            return reader.load_data(file=tmp_file_path, **kwargs)
        finally:
            tmp_file_path.unlink() 